package com.tensquare.friend.service;

import com.alibaba.fastjson.JSON;
import com.tensquare.friend.client.UserClient;
import com.tensquare.friend.dao.FriendDao;
import com.tensquare.friend.dao.NoFriendDao;
import com.tensquare.friend.pojo.Friend;
import com.tensquare.friend.pojo.NoFriend;
import com.tensquare.friend.pojo.User;
import entity.Result;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import org.springframework.stereotype.Service;

/**
 * 交友Service.
 *
 * @author 宫新程
 * @since 2019/3/18 0:34
 */
@Service
@Transactional
public class FriendService {

  @Resource private FriendDao friendDao;
  @Resource private NoFriendDao noFriendDao;
  @Resource private UserClient userClient;

  /**
   * 添加好友.
   *
   * @param userId 当前登录用户的id.
   * @param friendid 好友id.
   * @return 0-重复添加
   */
  public int addFriend(String userId, String friendid) {
    // 先判断userid到friendid是否有数据，有就是重复添加
    Friend friend = friendDao.findByUseridAndFriendid(userId, friendid);
    if (friend != null) {
      return 0;
    }

    // 判断该好友是否存在，需要调用user接口
    Result userResult = userClient.findById(friendid);
    String json = JSON.toJSONString(userResult.getData());
    User friendUser = JSON.parseObject(json, User.class);
    if (null == friendUser) {
      throw new RuntimeException("关注的用户不存在");
    }

    // 直接添加好友，让好友表中userid到friendid方向的type为0
    friend = new Friend();
    friend.setUserid(userId);
    friend.setFriendid(friendid);
    friend.setIslike("0");
    friendDao.save(friend);

    // 判断从friendid到userid是否有数据，如果有，把双方的状态都改为1
    Friend friend1 = friendDao.findByUseridAndFriendid(friendid, userId);
    if (friend1 != null) {
      friendDao.updateIsLike("1", userId, friendid);
      friendDao.updateIsLike("1", friendid, userId);
    }

    // 更新好友的 粉丝数 和 自己的关注数.
    userClient.updateFanscountAndFollowcount(userId, friendid, 1);
    return 1;
  }

  /**
   * 删除好友.
   *
   * @param userId 当前登录用户的id.
   * @param friendid 好友id.
   * @return 0-重复删除.
   */
  public int deleteFriend(String userId, String friendid) {
    NoFriend noFriend = noFriendDao.findByUseridAndFriendid(userId, friendid);
    if (null != noFriend) {
      return 0;
    }

    // 判断该好友是否存在，需要调用user接口
    Result userResult = userClient.findById(friendid);
    String json = JSON.toJSONString(userResult.getData());
    User friendUser = JSON.parseObject(json, User.class);
    if (null == friendUser) {
      throw new RuntimeException("该用户不存在");
    }

    noFriend = new NoFriend();
    noFriend.setFriendid(friendid);
    noFriend.setUserid(userId);
    noFriendDao.save(noFriend);
    return 1;
  }
}
